﻿public static class GlobalMembersGame_menu
{

//* 创建一个游戏菜单 
	// ****************************************************************************
	// * Punch And Kick -- a simple 2D Fighting Game.
	// *
	// * Copyright (C) 2013 by
	// * Liu Chao
	// *
	// * This file is part of the Punch And Kick project, and may only be used,
	// * modified, and distributed under the terms of the GPLv2.
	// *
	// * (GPLv2 is abbreviation of GNU General Public License Version 2)
	// *
	// * By continuing to use, modify, or distribute this file you indicate that you
	// * have read the license and understand and accept it fully.
	// *
	// * The Punch And Kick project is distributed in the hope that it will be
	// * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 
	// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GPL v2 for
	// * more details.
	// *
	// * You should have received a copy of the GPLv2 along with this file. It is
	// * usually in the LICENSE.TXT file, If not, see <http://www.gnu.org/licenses/>.
	// * **************************************************************************

	// ****************************************************************************
	// * Punch And Kick -- 一个普通的2D格斗游戏
	// *
	// * 版权所有 (C) 2013 归属于
	// * 刘超
	// *
	// * 这个文件是 Punch And Kick 项目的一部分，并且只可以根据GPLv2许可协议来使用、
	// * 更改和发布。
	// *
	// * (GPLv2 是 GNU通用公共许可证第二版 的英文缩写)
	// *
	// * 继续使用、修改或发布本文件，表明您已经阅读并完全理解和接受这个许可协议。
	// *
	// * Punch And Kick 项目是基于技术交流目的而加以散布的，但不负任何担保责任，例
	// * 如：稳定性、可玩性、趣味性等的担保，甚至没有适销性或特定用途的隐含担保，详
	// * 情请参照GPLv2许可协议。
	// *
	// * 您应已收到附随于本文件的GPLv2许可协议的副本，它通常在LICENSE.TXT文件中，如果
	// * 没有，请查看：<http://www.gnu.org/licenses/>.
	// * **************************************************************************


	// ****************************************************************************
	// * Punch And Kick -- a simple 2D Fighting Game.
	// *
	// * Copyright (C) 2013 by
	// * Liu Chao
	// *
	// * This file is part of the Punch And Kick project, and may only be used,
	// * modified, and distributed under the terms of the GPLv2.
	// *
	// * (GPLv2 is abbreviation of GNU General Public License Version 2)
	// *
	// * By continuing to use, modify, or distribute this file you indicate that you
	// * have read the license and understand and accept it fully.
	// *
	// * The Punch And Kick project is distributed in the hope that it will be
	// * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 
	// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GPL v2 for
	// * more details.
	// *
	// * You should have received a copy of the GPLv2 along with this file. It is
	// * usually in the LICENSE.TXT file, If not, see <http://www.gnu.org/licenses/>.
	// * **************************************************************************

	// ****************************************************************************
	// * Punch And Kick -- 一个普通的2D格斗游戏
	// *
	// * 版权所有 (C) 2013 归属于
	// * 刘超
	// *
	// * 这个文件是 Punch And Kick 项目的一部分，并且只可以根据GPLv2许可协议来使用、
	// * 更改和发布。
	// *
	// * (GPLv2 是 GNU通用公共许可证第二版 的英文缩写)
	// *
	// * 继续使用、修改或发布本文件，表明您已经阅读并完全理解和接受这个许可协议。
	// *
	// * Punch And Kick 项目是基于技术交流目的而加以散布的，但不负任何担保责任，例
	// * 如：稳定性、可玩性、趣味性等的担保，甚至没有适销性或特定用途的隐含担保，详
	// * 情请参照GPLv2许可协议。
	// *
	// * 您应已收到附随于本文件的GPLv2许可协议的副本，它通常在LICENSE.TXT文件中，如果
	// * 没有，请查看：<http://www.gnu.org/licenses/>.
	// * **************************************************************************

	

	//* 创建一个游戏菜单 
//	public static LCUI_Widget_ GameMenu_New()
//	{
//		return Widget_New(DefineConstantsGame_menu.WIDGET_TYPE_GAME_MENU);
//	}

////* 为菜单添加一个按钮 

//	//* 为菜单添加一个按钮 
//	public static LCUI_Widget_ GameMenu_NewButtonW(LCUI_Widget_ menu, char unicode_text)
//	{
//		string height_str = new string(new char[12]);
//		LCUI_Widget_ btn;
//		GameMenuData_ p_data;

//		btn = GameMenuBtn_New();
//		if (btn == null)
//		{
//			return null;
//		}

//		p_data = (GameMenuData_)Widget_GetPrivData(menu);
//		Queue_AddPointer(p_data.button_list, btn);
//		Widget_Container_Add(menu, btn);
//		height_str = string.Format("{0:D}px", p_data.button_height);
//		Widget_SetSize(btn, "100%", height_str);
//		GameMenuBtn_SetTextW(btn, unicode_text);
//		GameMenuBtn_SetFontSize(btn, p_data.font_size);
//		GameMenuBtn_SetForeWidgetColor(btn, RGB(0,0,0));
//		Widget_Show(btn);
//		Widget_Update(menu);
//		return btn;
//	}

////* 为菜单设置配色方案，以让菜单按钮拥有相应的颜色 

//	//* 为菜单设置配色方案，以让菜单按钮拥有相应的颜色 
//	public static void GameMenu_SetColorScheme(LCUI_Widget_ menu, LCUI_RGB_[] color_set, int n_color)
//	{
//		int i;
//		GameMenuData_ p_data;
//		p_data = (GameMenuData_)Widget_GetPrivData(menu);
//		for(i =0; i<n_color; ++i)
//		{
//			Queue_Add(p_data.color_set, color_set[i]);
//		}
//	}

////* 为菜单中的按钮设置子菜单，当该按钮被点击后，会显示子菜单 

//	//* 为菜单中的按钮设置子菜单，当该按钮被点击后，会显示子菜单 
//	public static int GameMenu_SetChildMenu(LCUI_Widget_ menu, LCUI_Widget_ menu_button, LCUI_Widget_ child_menu)
//	{
//		int i;
//		int n;
//		GameMenuData_ p_data;
//		LCUI_Widget_ p_exist_btn;
//		GameChildMenuData_ childmenu_data = new GameChildMenuData_();

//		p_data = (GameMenuData_)Widget_GetPrivData(menu);
//		n = Queue_GetTotal(p_data.button_list);
//		// 先检查按钮是不是属于菜单里的
//		for(i =0; i<n; ++i)
//		{
//			p_exist_btn = (LCUI_Widget_)Queue_Get(p_data.button_list, i);
//			if(p_exist_btn == null || p_exist_btn != menu_button)
//			{
//				continue;
//			}
//			break;
//		}
//		// 若没有该按钮的记录
//		if(i>=n)
//		{
//			return -1;
//		}
//		// 准备子菜单数据
//		childmenu_data.target_button = menu_button;
//		childmenu_data.menu = child_menu;
//		// 为菜单添加子菜单记录
//		Queue_Add(p_data.childmenu_data, childmenu_data);
//		p_data = (GameMenuData_)Widget_GetPrivData(child_menu);
//		// 记录该子菜单的父级菜单
//		p_data.parent_menu = menu;
//		return 0;
//	}

////* 仅显示主菜单 

//	//* 仅显示主菜单 
//	public static void GameMenu_OnlyShowMainMenu()
//	{
//		int n;
//		n = Queue_GetTotal(menu_stack);
//		for(; n>=1; --n)
//		{
//			GameMenuProc_HideTopMenu();
//		}
//	}

//	public static void GameMenu_Register()
//	{
//		WidgetType_Add(DefineConstantsGame_menu.WIDGET_TYPE_GAME_MENU);
//		WidgetFunc_Add(DefineConstantsGame_menu.WIDGET_TYPE_GAME_MENU, GameMenu_ExecInit, FuncType_.FUNC_TYPE_INIT);
//		WidgetFunc_Add(DefineConstantsGame_menu.WIDGET_TYPE_GAME_MENU, GameMenu_ExecUpdate, FuncType_.FUNC_TYPE_UPDATE);
//		WidgetFunc_Add(DefineConstantsGame_menu.WIDGET_TYPE_GAME_MENU, GameMenu_ExecDestroy, FuncType_.FUNC_TYPE_DESTROY);
//		WidgetFunc_Add(DefineConstantsGame_menu.WIDGET_TYPE_GAME_MENU, GameMenuProc_ShowMenu, FuncType_.FUNC_TYPE_SHOW);
//	}

//	//#endif

//	#define AVG_WIDTH

//	internal static LCUI_BOOL module_is_inited = DefineConstantsGame_menu.FALSE;
//	internal static LCUI_Queue menu_stack = new LCUI_Queue();
//	internal static LCUI_BOOL need_update_effect = DefineConstantsGame_menu.FALSE;
//	internal static LCUI_Pos_ root_menu_pos = new LCUI_Pos_(0,0);
//	internal static LCUI_Pos_ root_menu_offset_pos = new LCUI_Pos_(0,0);
//	internal static int menu_effect_timer = -1;
//	internal static int[] connect_id = new int[4];

//	//* 获取菜单的显示位置 
//	internal static int GameMenuProc_GetMenuPos(LCUI_Widget_ menu, LCUI_Pos_ menu_pos)
//	{
//		LCUI_Pos_ pos = new LCUI_Pos_(0,0);
//		GameMenuData_ p_data;
//		GameChildMenuData_ p_childmenu_data;
//		LCUI_Widget_ p_btn;
//		LCUI_Widget_ p_exist_btn;
//		LCUI_Widget_ parent_menu;
//		int i;
//		int n;
//		int btn_y;
//		int menu_height;
//		int root_menu_height;

//		p_data = (GameMenuData_)Widget_GetPrivData(menu);
//		// 获取该菜单的按钮数量 
//		n = Queue_GetTotal(p_data.button_list);
//		// 根据菜单按钮数量，计算该菜单的高度 
//		menu_height = n*(p_data.button_height+2);

//		parent_menu = p_data.parent_menu;
//		while (parent_menu != null)
//		{
//			p_data = (GameMenuData_)Widget_GetPrivData(parent_menu);
//			n = Queue_GetTotal(p_data.childmenu_data);
//			// 确定本级菜单与哪个按钮关联 
//			for(p_btn =null,i =0; i<n; ++i)
//			{
//				p_childmenu_data = (GameChildMenuData_) Queue_Get(p_data.childmenu_data, i);

//				if (p_childmenu_data == null)
//				{
//					continue;
//				}
//				if(p_childmenu_data.menu == menu)
//				{
//					p_btn = p_childmenu_data.target_button;
//					break;
//				}
//			}
//			if(i>= n)
//			{
//				break;
//			}

//			n = Queue_GetTotal(p_data.button_list);
//			// 确定按钮在菜单中的位置 
//			for(btn_y =0,i =0; i<n; ++i)
//			{
//				p_exist_btn = (LCUI_Widget_)Queue_Get(p_data.button_list, i);
//				if (p_exist_btn == null)
//				{
//					continue;
//				}
//				if(p_exist_btn == p_btn)
//				{
//					break;
//				}
//				// 计算下个按钮的位置 
//				btn_y += p_data.button_height;
//				btn_y += 2;
//			}

//			// 减去菜单中心的Y轴坐标，得出相对于中心的坐标 
//			btn_y -= n*(p_data.button_height+2)/2;
//			// 累计Y轴坐标 
//			pos.y += btn_y;
//			// 累计X轴坐标 
//			pos.x += Widget_GetWidth(parent_menu);
//			// 记录本级菜单 
//			menu = parent_menu;
//			// 切换至父级菜单 
//			parent_menu = p_data.parent_menu;
//		}
//		if (menu != null)
//		{
//			pos.x += _Widget_GetPos(menu).x;
//			pos.y += _Widget_GetPos(menu).y;
//			p_data = (GameMenuData_)Widget_GetPrivData(menu);
//			n = Queue_GetTotal(p_data.button_list);
//			root_menu_height = n*(p_data.button_height+2);
//			pos.y += p_data.button_height/2;
//		}
//		pos.y += root_menu_height/2;
//		pos.y -= menu_height/2;
//		menu_pos.x = pos.x;
//		menu_pos.y = pos.y;
//		return 0;
//	}
////C++ TO C# CONVERTER NOTE: This was formerly a static local variable declaration (not allowed in C#):
//private static GlobalMembersGame_menu.int current_offset_x = 0;

//	internal static void GameMenuProc_UpdateEffect(IntPtr arg)
//	{
//		LCUI_Pos_ pos = new LCUI_Pos_();
//		int target_offset_x;
//		int i;
//		int n;
//	//C++ TO C# CONVERTER NOTE: This static local variable declaration (not allowed in C#) has been moved just prior to the method:
//	//	static int current_offset_x = 0;
//		byte alpha;
//		LCUI_Widget_ menu;

//		if (need_update_effect == null)
//		{
//			return;
//		}
//		n = Queue_GetTotal(menu_stack);
//		// 计算目标X坐标偏移量 
//		target_offset_x = (n-1)*DefineConstantsGame_menu.AVG_WIDTH;
//		// 如果当前X坐标偏移量已经达到目标X坐标偏移量 
//		if(current_offset_x == target_offset_x)
//		{
//			return;
//		}
//		// 如果当前X坐标偏移量小于目标X坐标偏移量 
//		if(current_offset_x < target_offset_x)
//		{
//			current_offset_x += 4;
//			if(current_offset_x > target_offset_x)
//			{
//				current_offset_x = target_offset_x;
//			}
//		}
//		else
//		{
//			current_offset_x -= 4;
//			if(current_offset_x < target_offset_x)
//			{
//				current_offset_x = target_offset_x;
//			}
//		}
//		menu = (LCUI_Widget_)Queue_Get(menu_stack, 0);
//		// 根据部件的布局类型，进行相应方式的位置设置 
//		if(menu.align == ALIGN_TYPE_.ALIGN_NONE)
//		{
//			pos.x = root_menu_pos.x - current_offset_x;
//			pos.y = Widget_GetPos(menu).y;
//			Widget_Move(menu, pos);
//		}
//		else
//		{
//			pos.x = root_menu_offset_pos.x-current_offset_x;
//			pos.y = root_menu_offset_pos.y;
//			Widget_SetAlign(menu, menu.align, pos);
//		}
//		// 初始透明度为255 
//		alpha = 255;
//		for(i =n-1; i>=0; --i)
//		{
//			menu = (LCUI_Widget_)Queue_Get(menu_stack, i);
//			// 更新各个菜单的坐标 
//			GameMenuProc_GetMenuPos(menu, pos);
//			Widget_Move(menu, pos);
//			// 设置本级菜单的透明度 
//			Widget_SetAlpha(menu, alpha);
//			// 每到上一级菜单，减少一定的透明度 
//			alpha = (byte)(alpha * 0.65);
//		}
//	}

//	//* 显示菜单 
//	internal static void GameMenuProc_ShowMenu(LCUI_Widget_ menu)
//	{
//		int i;
//		int n;
//		LCUI_Widget_ exist_menu;

//		n = Queue_GetTotal(menu_stack);
//		// 将第一个菜单作为主菜单，并记录它的坐标 
//		if(n == 0)
//		{
//			root_menu_pos = Widget_GetPos(menu);
////C++ TO C# CONVERTER WARNING: The following line was determined to be a copy assignment (rather than a reference assignment) - this should be verified and a 'CopyFrom' method should be created if it does not yet exist:
////ORIGINAL LINE: root_menu_offset_pos = menu->offset;
//			root_menu_offset_pos.CopyFrom(menu.offset);
//		}
//		for(i =n-1;i>=0;--i)
//		{
//			exist_menu = (LCUI_Widget_)Queue_Get(menu_stack, n);
//			if(exist_menu != null && exist_menu == menu)
//			{
//				return;
//			}
//		}
//		Queue_AddPointer(menu_stack, menu);
//	}

//	// 显示子菜单 
//	internal static int GameMenuProc_ShowChildMenu(LCUI_Widget_ menu, LCUI_Widget_ btn)
//	{
//		int i;
//		int n;
//		LCUI_Pos_ menu_pos = new LCUI_Pos_();
//		GameMenuData_ p_data;
//		LCUI_Widget_ p_exist_btn;
//		GameChildMenuData_ p_childmenu_data;

//		p_data = (GameMenuData_)Widget_GetPrivData(menu);
//		n = Queue_GetTotal(p_data.button_list);
//		// 先检查按钮是不是属于菜单里的 
//		for(i =0; i<n; ++i)
//		{
//			p_exist_btn = (LCUI_Widget_)Queue_Get(p_data.button_list, i);
//			if(p_exist_btn == null || p_exist_btn != btn)
//			{
//				continue;
//			}
//			break;
//		}
//		// 若没有该按钮的记录 
//		if(i>=n)
//		{
//			return -1;
//		}

//		n = Queue_GetTotal(p_data.childmenu_data);
//		for(i =0; i<n; ++i)
//		{
//			p_childmenu_data = (GameChildMenuData_)Queue_Get(p_data.childmenu_data, i);
//			if (p_childmenu_data == null)
//			{
//				continue;
//			}
//			// 如果找到与该按钮关联的菜单，则显示它 
//			if(p_childmenu_data.target_button == btn)
//			{
//				// 获取菜单的坐标 
//				GameMenuProc_GetMenuPos(p_childmenu_data.menu, menu_pos);
//				// 设置菜单的坐标 
//				Widget_Move(p_childmenu_data.menu, menu_pos);
//				Widget_SetModal(p_childmenu_data.menu, DefineConstantsGame_menu.TRUE);
//				// 显示菜单 
//				Widget_Show(p_childmenu_data.menu);
//				// 标记需要更新菜单效果 
//				need_update_effect = DefineConstantsGame_menu.TRUE;
//			}
//		}
//		return 0;
//	}

//	// 隐藏最上层菜单 
//	internal static void GameMenuProc_HideTopMenu()
//	{
//		int n;
//		LCUI_Widget_ menu;

//		n = Queue_GetTotal(menu_stack);
//		if(n <= 0)
//		{
//			return;
//		}
//		menu = (LCUI_Widget_)Queue_Get(menu_stack, n-1);
//		// 只在显示一个以上的菜单时隐藏最上层菜单 
//		if(n > 1)
//		{
//			Queue_DeletePointer(menu_stack, n-1);
//			Widget_SetModal(menu, DefineConstantsGame_menu.FALSE);
//			Widget_Hide(menu);
//			// 标记需要更新菜单效果 
//			need_update_effect = DefineConstantsGame_menu.TRUE;
//		}
//		// 重置菜单焦点 
//		Widget_ResetFocus(menu);
//	}

//	private static void GameMenuProc_Dispatch(LCUI_Event *event, IntPtr unused)
//	{
//			int i;
//			int n;
//			LCUI_Widget_ widget;
//			LCUI_Widget_ btn;
//			LCUI_Widget_ menu;
//			LCUI_Widget_ exist_menu;

//			if(event.button.state == DefineConstantsGame_menu.LCUIKEYSTATE_PRESSED)
//			{
//					return;
//			}
//			exist_menu = (LCUI_Widget_)Queue_Get(menu_stack, 0);
//			// 如果该菜单的父部件不被允许响应事件 
//			if(exist_menu == null || !Widget_IsAllowResponseEvent(exist_menu.parent))
//			{
//					return;
//			}
//			// 获取点击的部件 
//			widget = Widget_At(null, Pos(event.button.x,event.button.y));
//			if (widget == null)
//			{
//					goto final_work;
//			}

//			// 如果该部件类型就是菜单按钮 
//			if(0 == _LCUIString_Cmp(widget.type_name, DefineConstantsGame_menu.WIDGET_TYPE_GAME_MENU_BUTTON))
//			{
//					btn = widget;
//			}
//			else
//			{
//					// 否则，查找菜单按钮类型的父级部件 
//					btn = Widget_GetParent(widget, DefineConstantsGame_menu.WIDGET_TYPE_GAME_MENU_BUTTON);
//					if (btn == null)
//					{
//							goto final_work;
//					}
//			}

//			menu = Widget_GetParent(btn, DefineConstantsGame_menu.WIDGET_TYPE_GAME_MENU);
//			if (menu == null)
//			{
//					goto final_work;
//			}
//			n = Queue_GetTotal(menu_stack);
//			for(i =n-1;i>=0;--i)
//			{
//					exist_menu = (LCUI_Widget_)Queue_Get(menu_stack, i);
//					if(exist_menu != null && exist_menu == menu)
//					{
//							break;
//					}
//			}
//			if(i < 0)
//			{
//					return;
//			}
//			else if(i == n-1)
//			{
//					GameMenuProc_ShowChildMenu(menu, btn);
//					return;
//			}
//	final_work:
//			GameMenuProc_HideTopMenu();
//	}

//	internal static  LCUI_Widget_ GameMenu_GetFocusButton(LCUI_Widget_ menu)
//	{
//		LCUI_Widget_ btn;
//		GameMenuData_ p_data;

//		p_data = (GameMenuData_)Widget_GetPrivData(menu);
//		btn = menu.focus_widget;
//		// 如果没有按钮获得焦点，则让第一个按钮获得焦点 
//		if (btn == null)
//		{
//			btn = (LCUI_Widget_)Queue_Get(p_data.button_list, 0);
//			// 如果连按钮都没有，那就退出 
//			if (btn == null)
//			{
//				return null;
//			}
//		}
//		return btn;
//	}

//	private static void GameMenuProc_KeyboardControl(LCUI_Event *event, IntPtr unused)
//	{
//		int i;
//		int n;
//		LCUI_Widget_ menu;
//		LCUI_Widget_ other_btn;
//		LCUI_Widget_ btn;
//		GameMenuData_ p_data;
//		LCUI_WidgetEvent wdg_event = new LCUI_WidgetEvent();
//		static  LCUI_Widget_ *click_btn = null;

//		n = Queue_GetTotal(menu_stack);
//		if(n <= 0)
//		{
//			return;
//		}
//		menu = (LCUI_Widget_)Queue_Get(menu_stack, n-1);
//		// 如果该菜单不被允许响应事件 
//		if(!Widget_IsAllowResponseEvent(menu))
//		{
//			return;
//		}
//		if(!menu.parent.visible)
//		{
//			return;
//		}
//		p_data = (GameMenuData_)Widget_GetPrivData(menu);
//		switch(event.key.key_code)
//		{
//		case DefineConstantsGame_menu.LCUIKEY_A:
//		case DefineConstantsGame_menu.LCUIKEY_K:
//		case VK_LEFT:
//		case VK_ESCAPE:
//			if(event.type != (int)AnonymousEnum.LCUI_KEYDOWN)
//			{
//				return;
//			}
//			GameMenuProc_HideTopMenu();
//			return;
//		case DefineConstantsGame_menu.LCUIKEY_D:
//		case DefineConstantsGame_menu.LCUIKEY_J:
//		case VK_RIGHT:
//		case VK_RETURN:
//			btn = menu.focus_widget;
//			// 如果没有按钮获得焦点 
//			if (btn == null)
//			{
//				break;
//			}
//			Widget_SetFocus(btn);
//			GameMenuProc_ShowChildMenu(menu, btn);
//	//         
//	//		 * 如果是“按键按下”事件，则记录当前按下的
//	//		 * 按钮部件，并设置该按钮的状态为ACTIVE 
//	//		 
//			if(event.type == (int)AnonymousEnum.LCUI_KEYDOWN)
//			{
//				click_btn = btn;
//				Widget_SetState(btn, WIDGET_STATE_.WIDGET_STATE_ACTIVE);
//				return;
//			}
//	//        
//	//		 * 否则是“按键释放”事件，若按下按键时和释放
//	//		 * 按键的按钮一样，则向该按钮部件发送CLICKED事件，
//	//		 
//			if(click_btn == btn)
//			{
//				wdg_event.type = EVENT_CLICKED;
//				wdg_event.clicked.rel_pos.x = 0;
//				wdg_event.clicked.rel_pos.y = 0;
//				Widget_DispatchEvent(btn, wdg_event);
//			}
//			// 将之前按住的按钮部件的状态设置为NORMAL 
//			Widget_SetState(click_btn, WIDGET_STATE_.WIDGET_STATE_NORMAL);
//			// 重置记录 
//			click_btn = null;
//			return;
//		case DefineConstantsGame_menu.LCUIKEY_W:
//		case VK_UP:
//			if(event.type != (int)AnonymousEnum.LCUI_KEYDOWN)
//			{
//				return;
//			}
//			btn = menu.focus_widget;
//			if (btn == null)
//			{
//				break;
//			}
//			n = Queue_GetTotal(p_data.button_list);
//			for(i =0; i<n; ++i)
//			{
//				other_btn = (LCUI_Widget_)Queue_Get(p_data.button_list, i);
//				if(other_btn == btn)
//				{
//					break;
//				}
//			}
//			--i;
//			if(i < 0)
//			{
//				i = 0;
//			}
//			// 获取上个按钮 
//			btn = (LCUI_Widget_)Queue_Get(p_data.button_list, i);
//			// 设置焦点 
//			Widget_SetFocus(btn);
//			return;
//		case DefineConstantsGame_menu.LCUIKEY_S:
//		case VK_DOWN:
//			if(event.type != (int)AnonymousEnum.LCUI_KEYDOWN)
//			{
//				return;
//			}
//			btn = menu.focus_widget;
//			if (btn == null)
//			{
//				break;
//			}
//			n = Queue_GetTotal(p_data.button_list);
//			for(i =0; i<n; ++i)
//			{
//				other_btn = (LCUI_Widget_)Queue_Get(p_data.button_list, i);
//				if(other_btn == btn)
//				{
//					break;
//				}
//			}
//			++i;
//			if(i >= n)
//			{
//				i = n-1;
//			}
//			// 获取下个按钮 
//			btn = (LCUI_Widget_)Queue_Get(p_data.button_list, i);
//			// 设置焦点 
//			Widget_SetFocus(btn);
////C++ TO C# CONVERTER TODO TASK: C# does not allow fall-through from a non-empty 'case':
//		default:
//			return;
//		}
//		// 若之前还有按住的按钮部件，则重置它的状态为NORMAL，并重置记录 
//		if(click_btn)
//		{
//			Widget_SetState(click_btn, WIDGET_STATE_.WIDGET_STATE_NORMAL);
//			click_btn = null;
//		}
//		// 取第一个按钮 
//		btn = (LCUI_Widget_)Queue_Get(p_data.button_list, 0);
//		// 如果连按钮都没有，那就退出 
//		if (btn == null)
//		{
//			return;
//		}
//		// 设置焦点 
//		Widget_SetFocus(btn);
//	}

//	internal static void GameMenuProc_Init()
//	{
//		if (module_is_inited != null)
//		{
//			return;
//		}
//		// 关联鼠标点击事件，以处理子菜单的调度显示 
//		connect_id[0] = LCUISysEvent_Connect(AnonymousEnum.LCUI_MOUSEBUTTONDOWN, GameMenuProc_Dispatch, null);
//		connect_id[1] = LCUISysEvent_Connect(AnonymousEnum.LCUI_MOUSEBUTTONUP, GameMenuProc_Dispatch, null);
//		// 关联键盘事件，以实现按键控制菜单 
//		connect_id[2] = LCUISysEvent_Connect(AnonymousEnum.LCUI_KEYUP, GameMenuProc_KeyboardControl, null);
//		connect_id[3] = LCUISysEvent_Connect(AnonymousEnum.LCUI_KEYDOWN, GameMenuProc_KeyboardControl, null);
//		Queue_Init(menu_stack, 0, null);
//		Queue_UsingPointer(menu_stack);
//		menu_effect_timer = LCUITimer_Set(20, GameMenuProc_UpdateEffect, null, DefineConstantsGame_menu.TRUE);
//		module_is_inited = DefineConstantsGame_menu.TRUE;
//	}

//	internal static void GameMenu_ExecInit(LCUI_Widget_ widget)
//	{
//		GameMenuData_ p_data;

//		p_data = (GameMenuData_)Widget_NewPrivData(widget, typeof(GameMenuData_));
//		p_data.button_height = 34;
//		p_data.font_size = 16;
//		p_data.parent_menu = null;

//		Queue_Init(p_data.color_set, typeof(LCUI_RGB_), null);
//		Queue_Init(p_data.button_list, 0, null);
//		Queue_Init(p_data.childmenu_data, typeof(GameChildMenuData_), null);
//		Queue_UsingPointer(p_data.button_list);
//		GameMenuProc_Init();
//	}

//	internal static void GameMenu_ExecDestroy(LCUI_Widget_ widget)
//	{

//	}

//	internal static void GameMenu_ExecUpdate(LCUI_Widget_ widget)
//	{
//		LCUI_RGB_ p_color;
//		GameMenuData_ p_data;
//		LCUI_Widget_ wdg_btn;
//		LCUI_Pos_ btn_pos = new LCUI_Pos_(0,0);
//		int btn_i;
//		int color_i =0;
//		int total_btn;
//		int total_color;

//		p_data = (GameMenuData_)Widget_GetPrivData(widget);
//		total_btn = Queue_GetTotal(p_data.button_list);
//		total_color = Queue_GetTotal(p_data.color_set);

//		for(btn_i =0; btn_i<total_btn; ++btn_i)
//		{
//			wdg_btn = (LCUI_Widget_)Queue_Get(p_data.button_list, btn_i);
//			if (wdg_btn == null)
//			{
//				continue;
//			}
//			// 移动按钮位置 
//			Widget_Move(wdg_btn, btn_pos);
//			// 计算下个按钮的位置 
//			btn_pos.y += p_data.button_height;
//			btn_pos.y += 2;
//			// 获取本按钮的配色 
//			p_color = (LCUI_RGB_)Queue_Get(p_data.color_set, color_i);
//			if (p_color != null)
//			{
//				// 设置按钮前景部件的颜色 
//				GameMenuBtn_SetForeWidgetColor(wdg_btn, p_color);
//				++color_i;
//				if(color_i >= total_color)
//				{
//					color_i = 0;
//				}
//				continue;
//			}
//			GameMenuBtn_SetForeWidgetColor(wdg_btn, RGB(0,0,0));
//		}
//	}
}


public class GameChildMenuData_
{
	public LCUI_Widget_ target_button;
	public LCUI_Widget_ menu;
}

public class GameMenuData_
{
	public int button_height; //*< 每个菜单按钮的高度 
	public int font_size; //*< 按钮中的缺省字体大小 
	public LCUI_Queue color_set = new LCUI_Queue(); //*< 配色集 
	public LCUI_Queue button_list = new LCUI_Queue(); //*< 菜单的按钮列表 
	public LCUI_Queue childmenu_data = new LCUI_Queue(); //*< 子菜单记录 
	public LCUI_Widget_ parent_menu; //*< 父级菜单 
}
